/**
 * 由吸热管拼成圆柱
 */

#ifndef REFINED_CYLINDER_H
#define REFINED_CYLINDER_H

#include <algorithm/shared/data/topology/geometry/Geometry.h>
#include <utils/ParaUtils.h>

#include <boost/describe.hpp>

namespace solar
{
    // 柱面
    class RefinedCylinder : public Geometry
    {
        public:
            RefinedCylinder(double height = 2, double radius = 0.5)
                : height_(height), radius_(radius)
            {
            }
            [[nodiscard]] auto getType() const -> GeometryType override { return type_; }
#include <utils/class_name.inc>

        private:
            double height_; // 圆柱的高和半径
            double radius_;

            // 关于吸热管和吸热板的一些参数
            int tube_{62};
            int panel_{18};
            int tube_unit_{20};
            double tube_radius_{0.01105}; // 吸热管的半径

            GeometryType type_ = GeometryType::kGeometryRefinedCylinder;
            BOOST_DESCRIBE_CLASS(RefinedCylinder, (Geometry), (), (),
                                 (height_, radius_, tube_, panel_, tube_unit_, tube_radius_))
    };

} // namespace solar
#define CURRENT_CLASS_NAME RefinedCylinder
#include <utils/class_describe_header.inc>
SOLAR_DESCRIBE_CLASS(RefinedCylinder, (Geometry), (), (),
                     (height_, radius_, tube_, panel_, tube_unit_, tube_radius_))
#endif
